package com.atbeijing.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}

object Spark14_Oper_Transform {

    def main(args: Array[String]): Unit = {

        val conf = new SparkConf().setMaster("local[*]").setAppName("TransformOperator")
        val sc = new SparkContext(conf)

        // TODO 算子 - 转换 - KV - partitionBy
        val rdd : RDD[Int] = sc.makeRDD(
            List(1,2,3,4),2
        )
        //rdd.sortBy()
        rdd.saveAsTextFile("output")
        // partitionBy根据指定的规则对数据进行重分区
        // partitionBy算子强调的是数据分区的变化，而不是数量的变化。
        val rdd1: RDD[(Int, Int)] = rdd.map((_, 1))
        // 隐式转换
        //rdd1.partitionBy(null);
        // RDD 一定没有partitionBy方法,但是可以通过隐式转换，调用这个方法
        // 要求处理的数据类型必须为KV类型
        //rdd.partitionBy(null)

        // partitionBy算子需要传递分区器对象
        // Spark中默认的分区器为HashPartitioner
        val rdd2 = rdd1.partitionBy(new HashPartitioner((2)))
        val rdd3 = rdd2.partitionBy(new HashPartitioner((2)))
        rdd2.saveAsTextFile("output1")




        sc.stop()

    }
    class User {

    }
}
